package com.wstx.mediaserver.service;

import com.wstx.mediaserver.common.AppVar;
import com.wstx.mediaserver.util.Ayaka;
import com.wstx.mediaserver.util.FileUtil;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.SystemUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

@Service
@RequiredArgsConstructor
public class FileService {

    @Value("${spring.servlet.multipart.location}")
    String remoteDir;

    final AppVar appVar;

    //名字都是包含后缀不包含路径的，如hexie.png
    public String upload(String uploadName, MultipartFile file) throws Exception {
        String originalName = file.getOriginalFilename();
        //如果传了文件名，就用，传的文件名是优先的；否则从文件解析；如果没传，同时也解析不出来，抛异常退出。
        //而且只要没抛异常，说明两个文件名好歹有一个非空，这个fileName一定是非空的
        String fileName = (String) Ayaka
                .FirstPresentEt(uploadName, originalName);
        //处理空文件名（文件就叫.jpg）。这样才彻底确定这个文件名合法可用
        String legalName = FileUtil.excludeBlankName(fileName);
        //文件类型分文件夹
        String fileType = FileUtil.fileType(legalName);
        //存储的文件名，加上了时间戳，防重+好找+好排序
        String storeName = FileUtil.storeName(legalName);

        String uploadDir = SystemUtils.IS_OS_WINDOWS ? "E:\\test" : remoteDir;
        FileUtil.transmission(file, FileUtil.remoteFullPath(uploadDir, fileType, storeName));

        return "http://" + appVar.ip + ":" + appVar.uploadProxyPort + "/" + fileType + "/" + storeName ;
    }

}
